package com.powernode.order.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.powernode.model.entity.order.OrderMonitor;
import com.powernode.model.entity.order.OrderMonitorRecord;
import com.powernode.order.mapper.OrderMonitorMapper;
import com.powernode.order.repository.OrderMonitorRecordRepository;
import com.powernode.order.service.OrderMonitorService;
import jakarta.annotation.Resource;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;

/**
 * 订单监控服务实现类
 * 负责订单监控相关的数据操作和业务逻辑
 */
@Service  // 声明为Spring服务组件，使其可以被自动发现和注入
@SuppressWarnings({"unchecked", "rawtypes"})  // 抑制未检查的类型警告
public class OrderMonitorServiceImpl extends ServiceImpl<OrderMonitorMapper, OrderMonitor> implements OrderMonitorService {
    @Resource
    private OrderMonitorRecordRepository orderMonitorRecordRepository;  // 自动注入订单监控记录的MongoDB仓库接口

    /**
     * 保存订单监控记录
     * @param orderMonitorRecord 订单监控记录对象，包含订单监控的详细信息
     * @return 保存操作是否成功完成
     */
    @Override
    public Boolean saveOrderMonitorRecord(OrderMonitorRecord orderMonitorRecord) {
        // 调用MongoDB仓库的save方法保存订单监控记录
        orderMonitorRecordRepository.save(orderMonitorRecord);
        // 返回操作成功的结果
        return true;
    }

    /**
     * 根据订单ID获取订单监控信息
     * @param orderId 订单ID，用于查询特定订单的监控记录
     * @return 订单监控对象，包含订单的监控信息
     */
    @Override
    public OrderMonitor getOrderMonitor(Long orderId) {
        // 创建Lambda查询包装器，用于构建条件查询
        LambdaQueryWrapper<OrderMonitor> queryWrapper = new LambdaQueryWrapper<>();
        // 添加查询条件：订单ID等于传入的orderId
        queryWrapper.eq(OrderMonitor::getOrderId, orderId);
        // 调用父类方法获取符合条件的单条记录
        return getOne(queryWrapper);
    }

    /**
     * 更新订单监控信息
     * @param orderMonitor 订单监控对象，包含需要更新的监控数据
     * @return 操作是否成功完成
     */
    @Override
    public Boolean updateOrderMonitor(OrderMonitor orderMonitor) {
        // 调用父类方法根据ID更新订单监控信息
        return updateById(orderMonitor);
    }

    /**
     * 保存订单监控信息
     * @param orderMonitor 订单监控对象，包含需要保存的监控数据
     * @return 保存后的订单监控ID
     */
    @Override
    public Long saveOrderMonitor(OrderMonitor orderMonitor) {
        // 调用父类方法保存订单监控信息
        save(orderMonitor);
        // 返回保存后自动生成的订单监控ID
        return orderMonitor.getId();
    }
}
